package network;

import java.io.IOException;
import java.net.*;
import java.util.Scanner;

/**
 * @author 兴趣使然黄小黄
 * @version 1.0
 */
@SuppressWarnings({"all"})
public class UdpEchoClient {
    // 准备一个 socket
    private DatagramSocket socket = null;
    // 发送到的ip和端口号
    private String serverIP;
    private int serverPort;

    // 指定发送到服务器的 ip 和 端口号
    public UdpEchoClient(String serverIP, int serverPort) throws SocketException {
        this.socket = new DatagramSocket(); // 由系统分配端口号 因为不知道用户哪些端口被占用 所以通常系统指定 服务器不用事先知道客户端端口号
        this.serverIP = serverIP;
        this.serverPort = serverPort;
    }

    // 启动客户端
    public void start() throws IOException {
        Scanner scanner = new Scanner(System.in);
        while (true) {
            // 1. 读取用户输入的内容
            System.out.println("-> ");
            String request = scanner.nextLine();
            // 2. 将用户输入的字符串包装成 UDP 请求，并发送
            //  1) 数据的内容 request字符串
            //  2) 数据发送给谁？服务器的ip和端口号
            DatagramPacket requestPacket = new DatagramPacket(request.getBytes(), request.getBytes().length,
                    InetAddress.getByName(serverIP), serverPort);
            socket.send(requestPacket);
            // 3. 从服务器获取响应数据，并解析
            DatagramPacket responsePacket = new DatagramPacket(new byte[1024], 1024);
            socket.receive(responsePacket);
            String response = new String(responsePacket.getData(), 0, responsePacket.getLength(), "UTF-8");
            // 4. 响应结果打印到控制台
            System.out.printf("req: %s, resp: %s\n", request, response);
        }
    }

    public static void main(String[] args) throws IOException {
        UdpEchoClient udpEchoClient = new UdpEchoClient("127.0.0.1", 9090);
        udpEchoClient.start();
    }
}
